package com.example.project.service.impl;

import com.example.framework.baseService.TokenService;
import com.example.project.entity.UserInfoBean;
import com.example.project.mapper.UserMapper;
import com.example.project.service.UserService;
import com.example.utils.redis.RedisUtils;
import com.example.utils.resultFormat.PageResult;
import com.example.utils.resultFormat.Result;
import com.example.utils.resultFormat.ResultUtil;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author admin
 * @Cacheable 在方法执行前Spring先查看缓存中是否有数据，如果有数据，则直接返回缓存数据；没有则调用方法并将方法返回值放进缓存。
 * @CachePut 将方法的返回值放到缓存中。
 * @CacheEvict 删除缓存中的数据。
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserMapper userMapper;

    @Autowired
    TokenService tokenService;

    @Autowired
    public RedisUtils redisCache;
    /**
     * 根据用户id查询信息
     */
    @Override
    public UserInfoBean getUserById(String id) {
        UserInfoBean userInfoBean = userMapper.getUserById(id);
        redisCache.setCacheObject("userInfoBean",userInfoBean);
        redisCache.expire("userInfoBean",30);//设置失效时间 单位秒
        return userInfoBean;
    }

    //根据用户名查询用户还有他的权限
    @Override
    public UserInfoBean selectUserByUsername(String userName) {
        return userMapper.selectUserByUsername(userName);
    }

    /**
     * 通用mapper查询全部
     */
    @Override
    public PageResult<UserInfoBean> getAllUser() {
        PageHelper.startPage(1, 2);
        List<UserInfoBean> users = userMapper.selectAll();
        redisCache.setCacheList("users",users);//redis 缓存
        redisCache.expire("users",30);//设置失效时间 单位秒
        return new PageResult(users);
    }

    /**
     * 通用mapper条件查询
     */
    @Override
    public Result<UserInfoBean> getUserInfo(UserInfoBean user) {
        return ResultUtil.success(userMapper.selectOne(user));
    }

    /**
     * 通用mapper新增
     */
    @Override
    public Result<Integer> insertUser(UserInfoBean user) {
        int insertNum = userMapper.insert(user);
        return ResultUtil.success(insertNum);
    }

    /**
     * 通用mapper更新
     */
    @Override
    public Result<Integer> updataUserInfo(UserInfoBean user) {
        return ResultUtil.success(userMapper.updateByPrimaryKey(user));
    }

    /**
     * 通用mapper删除
     */
    @Override
    public Result<Integer> deleteUserInfo(UserInfoBean user) {
        return ResultUtil.success(userMapper.deleteByPrimaryKey(user));
    }
}
